/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.controller;

import com.context.conexion.EnahoConexion;
import util.controller.TipoAccion1;
import util.controller.TipoAccion2;
import com.model.domain.enaho.cuestionario.CuestionarioEnaho;
import com.model.dao.mapping.Enaho01;
import com.model.domain.enaho.reporte.MonitoreoPorCapitulos;
import com.model.domain.enaho.reporte.MonitoreoPorCapitulosDetalle;
import com.model.domain.enaho.reporte.MonitoreoPorViviendas;
import com.model.domain.enaho.reporte.ReporteRecuperacionEnvios;
import com.model.domain.persona.HogarReporte;
import com.model.domain.proceso.envio.carga.EstadoCarga;
import com.model.domain.tiempo.Mes;
import com.model.domain.tiempo.Periodo;
import com.model.domain.ubicacion.Conglomerado;
import com.model.domain.ubicacion.Odei;
import com.model.domain.ubicacion.Vivienda;
import com.model.service.MonitoreoTransferenciaService;
import java.sql.Connection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Rdelacruz
 */
public class MonitoreoTransferenciaController 
extends AbstractController
{    
  
    public void verPorViviendas(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorViviendas(request, TipoAccion1.VER);
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_vivienda_01.jsp").forward(request, response);
    }
    
    public void buscarPorViviendas(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorViviendas(request, TipoAccion1.BUSCAR);
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_vivienda_01.jsp").forward(request, response);
    }       
    
    public void verPorCapitulosResumen(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorCapitulos(request,TipoAccion1.VER,TipoAccion2.RESUMEN);
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_hogar_capitulos_resumen_01.jsp").forward(request, response);
    }
    
    public void buscarPorCapitulosResumen(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorCapitulos(request,TipoAccion1.BUSCAR,TipoAccion2.RESUMEN);        
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_hogar_capitulos_resumen_01.jsp").forward(request, response);               
    }
    
    public void verPorCapitulosDetalle(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorCapitulos(request,TipoAccion1.VER,TipoAccion2.DETALLE);               
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_hogar_capitulos_detalle_01.jsp").forward(request, response);
    }
    
    public void buscarPorCapitulosDetalle(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelPorCapitulos(request,TipoAccion1.BUSCAR,TipoAccion2.DETALLE);        
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_hogar_capitulos_detalle_01.jsp").forward(request, response);               
    }
    
    public void verComboCapitulos(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String s =(String) request.getParameter("cuestionario");
        if(s!=null) {
            CuestionarioEnaho cu = CuestionarioEnaho.valueOf( s );
            if(cu!=null) {
                request.setAttribute("capitulos", cu.getEnumsSeccion());
            
                s =(String) request.getParameter("capitulo");
                if(s!=null) {
                    request.setAttribute("capitulo", cu.getEnumSeccionDe(s));
                }
            }
        }
        request.getRequestDispatcher("/pagweb/plantilla/combo_capitulos.jsp").forward(request, response);
    }
    
    public void verRecuperacionEnvios(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelRecuperacionEnvios(request,TipoAccion1.VER);               
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_recuperacion_envios_01.jsp").forward(request, response);
    }
    
    public void buscarRecuperacionEnvios(HttpServletRequest request, HttpServletResponse response) throws Exception {
        crearModelRecuperacionEnvios(request,TipoAccion1.BUSCAR);        
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/monitoreo_recuperacion_envios_01.jsp").forward(request, response);               
    }
            
    public void verReglasControlEnvios(HttpServletRequest request, HttpServletResponse response) throws Exception {
        request.getRequestDispatcher("/pagweb/transferencia/monitoreo/reglas_control_envios_01.jsp").forward(request, response);               
    }
    
    private void crearModelRecuperacionEnvios(
            HttpServletRequest request,
            TipoAccion1 accion ) throws Exception {
        
        MonitoreoTransferenciaService service = (MonitoreoTransferenciaService)this.getService();
        
        //Nota: El filtro deberia ser HogarXmlTransferido porque tiene atributo ultimaCarga         
        //HogarXmlTransferido filtro = null; 
        
        Conglomerado filtro = null;
        EstadoCarga filtroEstado = null;
        if(accion==TipoAccion1.BUSCAR) {            
            Conglomerado c = new Conglomerado();                
            Odei odei = new Odei();
            odei.setCodigo(request.getParameter("odei"));
            c.setOdei(odei);

            Mes mes = new Mes();
            mes.setCodigo(request.getParameter("mes"));
            c.setMes(mes);

            Periodo p = new Periodo();
            p.setCodigo(request.getParameter("periodo"));
            c.setPeriodo(p);

            c.setCodigo(request.getParameter("conglomerado"));
            
            //if(!c.getCodigo().isEmpty()) {
            //    //Si se selecciona un Conglomerado, se descarta la selección de una ODEI
            //    c.getOdei().setCodigo("");
            //}
            
            request.setAttribute("filtro", c);
            
            String est = request.getParameter("estado");
            if(!est.isEmpty())
                filtroEstado = EstadoCarga.valueOf(est);
            request.setAttribute("filtroEstado", filtroEstado);
            
            filtro = c;
        }
        
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            
            List<Odei> odeis = service.getListaOdeis(con);
            List<Mes> meses = service.getListaMeses(con);
            List<Periodo> periodos = service.getListaPeriodos(con);            
            List<Conglomerado> conglomerados = service.getListaConglomerados(con);
            request.setAttribute("odeis", odeis);
            request.setAttribute("meses", meses);            
            request.setAttribute("periodos", periodos);
            request.setAttribute("conglomerados", conglomerados);
            
            //request.setAttribute("estados", new EstadoCarga[]{EstadoCarga.CARGA_RECHAZADA} );
            request.setAttribute("estados", EstadoCarga.values());
            
            ReporteRecuperacionEnvios rep = null;
            if(accion==TipoAccion1.VER)
                rep = new ReporteRecuperacionEnvios();                        
            else         
                rep = service.getReporteRecuperacionEnvios(con,filtro,filtroEstado,odeis,meses,periodos);
            
            request.setAttribute("reporte", rep);
        }
        finally {
            if(con!=null) con.close();
        }           
        
    }
        
    private void crearModelPorViviendas(
            HttpServletRequest request,
            TipoAccion1 accion ) throws Exception {
        
        MonitoreoTransferenciaService service = (MonitoreoTransferenciaService)this.getService();
        
        Vivienda filtro = null;
        if(accion==TipoAccion1.BUSCAR) {
            filtro = new Vivienda();

            Conglomerado c = new Conglomerado();                
            Odei odei = new Odei();
            odei.setCodigo(request.getParameter("odei"));
            c.setOdei(odei);

            Mes mes = new Mes();
            mes.setCodigo(request.getParameter("mes"));
            c.setMes(mes);

            Periodo p = new Periodo();
            p.setCodigo(request.getParameter("periodo"));
            c.setPeriodo(p);

            c.setCodigo(request.getParameter("conglomerado"));  

            filtro.setConglomerado(c);
            
            request.setAttribute("filtro", filtro);
        }
        
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            
            List<Odei> odeis = service.getListaOdeis(con);
            List<Mes> meses = service.getListaMeses(con);
            List<Periodo> periodos = service.getListaPeriodos(con);            
            List<Conglomerado> conglomerados = service.getListaConglomerados(con);
            request.setAttribute("odeis", odeis);
            request.setAttribute("meses", meses);            
            request.setAttribute("periodos", periodos);
            request.setAttribute("conglomerados", conglomerados);
            MonitoreoPorViviendas rep = null;
            if(accion==TipoAccion1.VER)
                rep = new MonitoreoPorViviendas();                        
            else    
                rep = service.getMonitoreoPorViviendas(con,filtro,odeis,meses,periodos);
            request.setAttribute("rsMonitor", rep);
        }
        finally {
            if(con!=null) con.close();
        }            
    }  
    
    private void crearModelPorCapitulos(
            HttpServletRequest request,             
            TipoAccion1 accion1,
            TipoAccion2 accion2) 
            throws Exception {
        MonitoreoTransferenciaService service = (MonitoreoTransferenciaService)this.getService();
        
        HogarReporte filtro = null;
        
        if(accion1==TipoAccion1.BUSCAR) {
            filtro = new HogarReporte();
        
            Conglomerado c = new Conglomerado();                
            Odei odei = new Odei();
            odei.setCodigo(request.getParameter("odei"));
            c.setOdei(odei);

            Mes mes = new Mes();
            mes.setCodigo(request.getParameter("mes"));
            c.setMes(mes);

            Periodo p = new Periodo();
            p.setCodigo(request.getParameter("periodo"));
            c.setPeriodo(p);

            c.setCodigo(request.getParameter("conglomerado"));  

            Vivienda v = new Vivienda();
            v.setConglomerado(c);

            filtro.setVivienda(v);

            String s =(String) request.getParameter("cuestionario");
            if(s!=null) {
                CuestionarioEnaho cu = CuestionarioEnaho.valueOf( s );
                filtro.setCuestionario(cu);
                
                s =(String) request.getParameter("capitulo");
                if(s!=null) {
                    filtro.setSeccion( cu.getEnumSeccionDe(s) );
                    
                    request.setAttribute("capitulo", filtro.getSeccion());
                }
            }                      
        }
        else if(accion1==TipoAccion1.VER) {
            //Por defecto
            filtro = new HogarReporte();
            filtro.setCuestionario(CuestionarioEnaho.ENAHO_01);
            filtro.setSeccion(Enaho01.CAP_100);
        }
        
        request.setAttribute("filtro", filtro);
        
        
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            
            List<Odei> odeis = service.getListaOdeis(con);
            List<Mes> meses = service.getListaMeses(con);
            List<Periodo> periodos = service.getListaPeriodos(con);            
            List<Conglomerado> conglomerados = service.getListaConglomerados(con);
            request.setAttribute("odeis", odeis);
            request.setAttribute("meses", meses);            
            request.setAttribute("periodos", periodos);
            request.setAttribute("conglomerados", conglomerados);            
            request.setAttribute("cuestionarios", CuestionarioEnaho.values());
                        
            if(accion2==TipoAccion2.RESUMEN) {                
                MonitoreoPorCapitulos rep = null;
                if(accion1==TipoAccion1.VER) {
                    rep = new MonitoreoPorCapitulos();                
                }
                else if(accion1==TipoAccion1.BUSCAR) {
                    rep = service.getMonitoreoPorCapitulosResumen(con,filtro,odeis,meses,periodos);                    
                }            
                request.setAttribute("rsMonitor", rep);
            }
            else if(accion2==TipoAccion2.DETALLE) {
                MonitoreoPorCapitulosDetalle rep = null;
                if(accion1==TipoAccion1.VER) {
                    rep = new MonitoreoPorCapitulosDetalle();
                }
                else if(accion1==TipoAccion1.BUSCAR) {
                    rep = service.getMonitoreoPorCapitulosDetalle(con,filtro,odeis,meses,periodos);
                } 
                request.setAttribute("rsMonitor", rep);
                
                CuestionarioEnaho cu = filtro.getCuestionario();
                if(cu!=null)
                    request.setAttribute("capitulos", cu.getEnumsSeccion());
            }         
        }
        finally {
            if(con!=null) con.close();
        }
        
        //return filtro;
    } 


}
